home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / ViePratique / ArchiFacile / ArchiFacileSetup.exe / {app} / nw.pak / Unnamed File 000140.txt < prev    next >
Text File  |  2014-10-14  |  5KB  |  190 lines

  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4.  
  5. /**
  6.  * @fileoverview This is a table column model
  7.  */
  8. cr.define('cr.ui.table', function() {
  9.   /** @const */ var EventTarget = cr.EventTarget;
  10.  
  11.   /**
  12.    * A table column model that wraps table columns array
  13.    * This implementation supports widths in percents.
  14.    * @param {!Array<cr.ui.table.TableColumn>} columnIds Array of table columns.
  15.    * @constructor
  16.    * @extends {EventTarget}
  17.    */
  18.   function TableColumnModel(tableColumns) {
  19.     this.columns_ = [];
  20.     for (var i = 0; i < tableColumns.length; i++) {
  21.       this.columns_.push(tableColumns[i].clone());
  22.     }
  23.   }
  24.  
  25.   var MIMIMAL_WIDTH = 10;
  26.  
  27.   TableColumnModel.prototype = {
  28.     __proto__: EventTarget.prototype,
  29.  
  30.     /**
  31.      * The number of the columns.
  32.      * @type {number}
  33.      */
  34.     get size() {
  35.       return this.columns_.length;
  36.     },
  37.  
  38.     /**
  39.      * Returns id of column at the given index.
  40.      * @param {number} index The index of the column.
  41.      * @return {string} Column id.
  42.      */
  43.     getId: function(index) {
  44.       return this.columns_[index].id;
  45.     },
  46.  
  47.     /**
  48.      * Returns name of column at the given index. Name is used as column header
  49.      * label.
  50.      * @param {number} index The index of the column.
  51.      * @return {string} Column name.
  52.      */
  53.     getName: function(index) {
  54.       return this.columns_[index].name;
  55.     },
  56.  
  57.     /**
  58.      * Sets name of column at the given index.
  59.      * @param {number} index The index of the column.
  60.      * @param {string} Column name.
  61.      */
  62.     setName: function(index, name) {
  63.       if (index < 0 || index >= this.columns_.size - 1)
  64.         return;
  65.       if (name != this.columns_[index].name)
  66.         return;
  67.  
  68.       this.columns_[index].name = name;
  69.       cr.dispatchSimpleEvent(this, 'change');
  70.     },
  71.  
  72.     /**
  73.      * Returns width (in percent) of column at the given index.
  74.      * @param {number} index The index of the column.
  75.      * @return {string} Column width in pixels.
  76.      */
  77.     getWidth: function(index) {
  78.       return this.columns_[index].width;
  79.     },
  80.  
  81.     /**
  82.      * Check if the column at the given index should align to the end.
  83.      * @param {number} index The index of the column.
  84.      * @return {boolean} True if the column is aligned to end.
  85.      */
  86.     isEndAlign: function(index) {
  87.       return this.columns_[index].endAlign;
  88.     },
  89.  
  90.     /**
  91.      * Sets width of column at the given index.
  92.      * @param {number} index The index of the column.
  93.      * @param {number} Column width.
  94.      */
  95.     setWidth: function(index, width) {
  96.       if (index < 0 || index >= this.columns_.size - 1)
  97.         return;
  98.  
  99.       width = Math.max(width, MIMIMAL_WIDTH);
  100.       if (width == this.columns_[index].width)
  101.         return;
  102.  
  103.       this.columns_[index].width = width;
  104.       cr.dispatchSimpleEvent(this, 'resize');
  105.     },
  106.  
  107.     /**
  108.      * Returns render function for the column at the given index.
  109.      * @param {number} index The index of the column.
  110.      * @return {Function(*, string, cr.ui.Table): HTMLElement} Render function.
  111.      */
  112.     getRenderFunction: function(index) {
  113.       return this.columns_[index].renderFunction;
  114.     },
  115.  
  116.     /**
  117.      * Sets render function for the column at the given index.
  118.      * @param {number} index The index of the column.
  119.      * @param {Function(*, string, cr.ui.Table): HTMLElement} Render function.
  120.      */
  121.     setRenderFunction: function(index, renderFunction) {
  122.       if (index < 0 || index >= this.columns_.size - 1)
  123.         return;
  124.       if (renderFunction !== this.columns_[index].renderFunction)
  125.         return;
  126.  
  127.       this.columns_[index].renderFunction = renderFunction;
  128.       cr.dispatchSimpleEvent(this, 'change');
  129.     },
  130.  
  131.     /**
  132.      * Render the column header.
  133.      * @param {number} index The index of the column.
  134.      * @param {cr.ui.Table} Owner table.
  135.      */
  136.     renderHeader: function(index, table) {
  137.       var c = this.columns_[index];
  138.       return c.headerRenderFunction.call(c, table);
  139.     },
  140.  
  141.     /**
  142.      * The total width of the columns.
  143.      * @type {number}
  144.      */
  145.     get totalWidth() {
  146.       var total = 0;
  147.       for (var i = 0; i < this.size; i++) {
  148.         total += this.columns_[i].width;
  149.       }
  150.       return total;
  151.     },
  152.  
  153.     /**
  154.      * Normalizes widths to make their sum 100%.
  155.      */
  156.     normalizeWidths: function(contentWidth) {
  157.       if (this.size == 0)
  158.         return;
  159.       var c = this.columns_[0];
  160.       c.width = Math.max(10, c.width - this.totalWidth + contentWidth);
  161.     },
  162.  
  163.     /**
  164.      * Returns default sorting order for the column at the given index.
  165.      * @param {number} index The index of the column.
  166.      * @return {string} 'asc' or 'desc'.
  167.      */
  168.     getDefaultOrder: function(index) {
  169.       return this.columns_[index].defaultOrder;
  170.     },
  171.  
  172.     /**
  173.      * Returns index of the column with given id.
  174.      * @param {string} id The id to find.
  175.      * @return {number} The index of column with given id or -1 if not found.
  176.      */
  177.     indexOf: function(id) {
  178.       for (var i = 0; i < this.size; i++) {
  179.         if (this.getId(i) == id)
  180.           return i;
  181.       }
  182.       return -1;
  183.     },
  184.   };
  185.  
  186.   return {
  187.     TableColumnModel: TableColumnModel
  188.   };
  189. });
  190.